Skip to content

方式1:部署脚本自动生成并写入 .env(推荐生产使用)

创建一个部署脚本 deploy.sh,在服务器上运行时自动生成强密码并创建 .env.prod。

bash
#!/bin/bash
set -e

echo "正在生成生产环境 .env.prod 文件..."

# 如果已经存在,备份
[ -f .env.prod ] && cp .env.prod .env.prod.bak.$(date +%Y%m%d%H%M%S)

cat > .env.prod << EOF
# ==================== 自动生成的生产配置 ====================
TZ=Asia/Shanghai
SPRING_PROFILES_ACTIVE=prod

# MySQL
MYSQL_MASTER_PORT=13306
MYSQL_SLAVE_PORT=13307
MYSQL_ROOT_PASSWORD=$(openssl rand -base64 32)
MYSQL_DATABASE=tour-mate-platform
MYSQL_REPL_USER=repl
MYSQL_REPL_PASSWORD=$(openssl rand -base64 32)

# Redis(生产必须有密码)
REDIS_PORT=6379
REDIS_PASSWORD=$(openssl rand -base64 32)

# RabbitMQ
RABBITMQ_AMQP_PORT=5672
RABBITMQ_MANAGEMENT_PORT=15672
RABBITMQ_USERNAME=tourmate
RABBITMQ_PASSWORD=$(openssl rand -base64 32)
RABBITMQ_VHOST=/tour-mate

# WuKongIM
WUKONGIM_API_PORT=5001
WUKONGIM_TCP_PORT=5100
WUKONGIM_WS_PORT=5200
WUKONGIM_ADMIN_PORT=5300
WUKONGIM_METRICS_PORT=5172
WUKONGIM_EXTERNAL_IP=$(curl -s ifconfig.me)  # 自动获取公网IP,或改成你的域名
WUKONGIM_TOKEN_SECRET=$(openssl rand -base64 64)

# Grafana
GRAFANA_PORT=3000
GRAFANA_ADMIN_USER=admin
GRAFANA_ADMIN_PASSWORD=$(openssl rand -base64 24)

# JWT
JWT_SECRET=$(openssl rand -base64 64)

# 微信相关等敏感信息需要手动填入(脚本不自动生成)
WECHAT_MINI_APP_ID=your_real_app_id
WECHAT_MINI_APP_SECRET=your_real_secret
WECHAT_PAY_MCH_ID=your_mch_id
# ... 其他微信配置手动补充

EOF

echo ".env.prod 已生成(敏感密码已自动随机)"
echo "请手动补充微信支付等第三方密钥后执行:"
echo "docker-compose --env-file .env.prod up -d"

纯手动完成密码生成

下面我作为高级开发和运维专家,给你推荐几种常用、可靠的方式来生成强密码和密钥,并按场景分类说明该用多长、什么字符集。

1. 推荐生成工具(从最方便到最专业)

工具/方式适用场景优点生成示例命令/链接
命令行 openssl服务器上快速生成(推荐首选)无需安装额外工具,随机性极高openssl rand -base64 32
命令行 /dev/urandomLinux/Mac 服务器系统自带,纯本地`cat /dev/urandom
pwgen服务器上生成易读密码可生成易记但仍安全的密码pwgen -sy 32 1
1Password / Bitwarden个人/团队密码管理内置强密码生成器,可安全存储内置生成器,长度 32+
LastPass Generator在线快速生成方便,但不要用于最高敏感密钥https://www.lastpass.com/password-generator
Docker 内置生成部署时自动生成可在启动脚本中自动生成并注入-

2. 各配置项推荐长度和生成方式

配置项推荐长度字符集要求生成命令示例(推荐)
REDIS_PASSWORD32 字符大小写字母 + 数字 + 符号openssl rand -base64 32
RABBITMQ_PASSWORD32 字符同上openssl rand -base64 32
MYSQL_ROOT_PASSWORD32 字符同上openssl rand -base64 32
MYSQL_REPL_PASSWORD32 字符同上同上
GRAFANA_ADMIN_PASSWORD24~32 字符同上pwgen -sy 32 1(更易手动输入)
JWT_SECRET至少 256 bit(32 字节),推荐 512 bit(64 字节)必须纯 Base64 编码(避免特殊字符问题)openssl rand -base64 64
WUKONGIM_TOKEN_SECRET64 字符同 JWTopenssl rand -base64 64
WECHAT_PAY_API_V3_KEY固定 32 字符微信要求正好 32 位大小写字母+数字`openssl rand -base64 32
微信 AppSecret 等微信分配的原值,不可自生成--

Powered by VitePress